{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from src import config, utils\n",
    "import logging\n",
    "from sklearn.model_selection import KFold\n",
    "from sklearn.metrics import roc_auc_score\n",
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "from sklearn.model_selection import GridSearchCV, RandomizedSearchCV\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def scorer(estimator, X, y):\n",
    "    y_pred = estimator.predict_proba(X)[:, 1]\n",
    "    return roc_auc_score(y, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:root:Will drop ['a_feature', 'UserInfo_270'] len=2\n"
     ]
    }
   ],
   "source": [
    "assert config.dataset == 'val'\n",
    "train = pd.read_csv(config.pj_root + 'data/' + config.dataset + '.csv', index_col='no')\n",
    "\n",
    "assert train.columns[0] == 'flag'\n",
    "a_feature = pd.read_csv(config.pj_root + 'data/a_feature.csv', index_col='no')\n",
    "train = train.join(a_feature)\n",
    "\n",
    "if len(config.drop_columns) != 0:\n",
    "    logging.warning('Will drop %s len=%d' % (str(config.drop_columns), len(config.drop_columns)))\n",
    "    train = train.drop(config.drop_columns, axis=1)\n",
    "\n",
    "if len(config.select_columns) != 0:\n",
    "    config.select_columns.insert(0, 'flag')  # use flag in training\n",
    "    logging.warning('Will select %s len=%d' % (str(config.select_columns), len(config.select_columns)))\n",
    "    train = train[train.columns[train.columns.isin(config.select_columns)]]\n",
    "else:\n",
    "    config.select_columns = list(train.columns)[1:]\n",
    "\n",
    "\n",
    "if config.use_basic_process:\n",
    "    train, col_func_map = utils.basic_process(train, has_flag=True)\n",
    "    utils.dump_to_data(col_func_map, 'col_func_map.pkl')\n",
    "\n",
    "X = train.values[:, 1:]\n",
    "Y = train.values[:, 0:1].reshape((-1,))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 648 candidates, totalling 1944 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Done  18 tasks      | elapsed:    1.8s\n",
      "[Parallel(n_jobs=-1)]: Done 168 tasks      | elapsed:   11.5s\n",
      "[Parallel(n_jobs=-1)]: Done 418 tasks      | elapsed:   27.9s\n",
      "[Parallel(n_jobs=-1)]: Done 768 tasks      | elapsed:   51.2s\n",
      "[Parallel(n_jobs=-1)]: Done 1218 tasks      | elapsed:  1.3min\n",
      "[Parallel(n_jobs=-1)]: Done 1768 tasks      | elapsed:  2.0min\n",
      "[Parallel(n_jobs=-1)]: Done 1944 out of 1944 | elapsed:  2.2min finished\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.590267895656\n",
      "{'n_estimators': 40, 'min_samples_leaf': 5, 'max_depth': 7, 'criterion': 'entropy', 'max_features': 'sqrt'}\n"
     ]
    }
   ],
   "source": [
    "param_grid=dict(\n",
    "    min_samples_leaf = [1, 5, 10],\n",
    "#     min_samples_split = [2, 5, 10], #必须大于等于2。分裂的个数\n",
    "    n_estimators = [10, 20, 30, 40, 50, 100],\n",
    "    max_depth=range(1, 10),\n",
    "    max_features=['sqrt', 'log2'],\n",
    "    criterion=['gini', 'entropy'],\n",
    "#     class_weight=['balanced']\n",
    ")\n",
    "\n",
    "model = GridSearchCV(config.model(), param_grid, scorer, cv=3, verbose=1, n_jobs=-1)\n",
    "# model = RandomizedSearchCV(config.model(), param_grid, 3000, scorer, cv=3, verbose=1, n_jobs=-1)\n",
    "\n",
    "model.fit(X, Y)\n",
    "model.cv_results_\n",
    "all_scores = model.cv_results_['mean_test_score']\n",
    "all_params = model.cv_results_['params']\n",
    "columns = []\n",
    "for key in all_params[0]:\n",
    "    columns.append(key)\n",
    "list_result = []\n",
    "for i in range(len(all_scores)):\n",
    "    temp=[all_scores[i]]\n",
    "    for col in columns:\n",
    "        temp.append(all_params[i][col])\n",
    "    list_result.append(temp)\n",
    "columns.insert(0, 'mean_test_score')\n",
    "cv_df = pd.DataFrame(list_result, columns=columns)\n",
    "print(model.best_score_)\n",
    "print(model.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7ff074a90668>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff074228630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.pointplot(x='n_estimators', y='mean_test_score', hue='min_samples_leaf', data=cv_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "i = pd.DataFrame({'feature':train.columns[1:], 'importance':model.best_estimator_.feature_importances_})\n",
    "i = i[i.importance>0].sort_values('importance', ascending=False)\n",
    "i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_test_score</th>\n",
       "      <th>n_estimators</th>\n",
       "      <th>max_depth</th>\n",
       "      <th>criterion</th>\n",
       "      <th>max_features</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>0.579307</td>\n",
       "      <td>50</td>\n",
       "      <td>5</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>0.578871</td>\n",
       "      <td>100</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>0.576049</td>\n",
       "      <td>30</td>\n",
       "      <td>4</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>0.574047</td>\n",
       "      <td>100</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>0.573402</td>\n",
       "      <td>100</td>\n",
       "      <td>2</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>135</th>\n",
       "      <td>0.572022</td>\n",
       "      <td>40</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>0.571485</td>\n",
       "      <td>100</td>\n",
       "      <td>1</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>136</th>\n",
       "      <td>0.570542</td>\n",
       "      <td>50</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>0.570521</td>\n",
       "      <td>20</td>\n",
       "      <td>5</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>0.570499</td>\n",
       "      <td>40</td>\n",
       "      <td>6</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>0.569553</td>\n",
       "      <td>30</td>\n",
       "      <td>2</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>167</th>\n",
       "      <td>0.569152</td>\n",
       "      <td>100</td>\n",
       "      <td>5</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>0.568059</td>\n",
       "      <td>40</td>\n",
       "      <td>2</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>0.567526</td>\n",
       "      <td>40</td>\n",
       "      <td>5</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.567502</td>\n",
       "      <td>50</td>\n",
       "      <td>2</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>138</th>\n",
       "      <td>0.567423</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>0.567370</td>\n",
       "      <td>40</td>\n",
       "      <td>6</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>0.566660</td>\n",
       "      <td>100</td>\n",
       "      <td>4</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>0.566632</td>\n",
       "      <td>30</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>0.566337</td>\n",
       "      <td>100</td>\n",
       "      <td>6</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>0.566286</td>\n",
       "      <td>30</td>\n",
       "      <td>4</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>202</th>\n",
       "      <td>0.566147</td>\n",
       "      <td>50</td>\n",
       "      <td>8</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>133</th>\n",
       "      <td>0.566133</td>\n",
       "      <td>20</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>187</th>\n",
       "      <td>0.566035</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>185</th>\n",
       "      <td>0.565656</td>\n",
       "      <td>100</td>\n",
       "      <td>7</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>0.565614</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>132</th>\n",
       "      <td>0.565515</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>0.565050</td>\n",
       "      <td>50</td>\n",
       "      <td>5</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.564641</td>\n",
       "      <td>100</td>\n",
       "      <td>1</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>179</th>\n",
       "      <td>0.564463</td>\n",
       "      <td>100</td>\n",
       "      <td>6</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>0.538357</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>0.538333</td>\n",
       "      <td>50</td>\n",
       "      <td>4</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>0.538286</td>\n",
       "      <td>10</td>\n",
       "      <td>4</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>164</th>\n",
       "      <td>0.537621</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.537086</td>\n",
       "      <td>30</td>\n",
       "      <td>2</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>0.536543</td>\n",
       "      <td>20</td>\n",
       "      <td>5</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>0.536192</td>\n",
       "      <td>50</td>\n",
       "      <td>7</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.536074</td>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>0.535547</td>\n",
       "      <td>40</td>\n",
       "      <td>4</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>168</th>\n",
       "      <td>0.535536</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.535382</td>\n",
       "      <td>40</td>\n",
       "      <td>2</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>0.535285</td>\n",
       "      <td>10</td>\n",
       "      <td>7</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104</th>\n",
       "      <td>0.534782</td>\n",
       "      <td>30</td>\n",
       "      <td>9</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>0.534070</td>\n",
       "      <td>20</td>\n",
       "      <td>5</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>0.534033</td>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>entropy</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>0.533105</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>0.532395</td>\n",
       "      <td>10</td>\n",
       "      <td>7</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>0.531140</td>\n",
       "      <td>30</td>\n",
       "      <td>6</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.530009</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>0.529010</td>\n",
       "      <td>20</td>\n",
       "      <td>3</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>0.527879</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>210</th>\n",
       "      <td>0.527168</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>211</th>\n",
       "      <td>0.526498</td>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>0.526331</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>0.525741</td>\n",
       "      <td>20</td>\n",
       "      <td>8</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>0.525078</td>\n",
       "      <td>20</td>\n",
       "      <td>8</td>\n",
       "      <td>entropy</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>0.523802</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>0.522700</td>\n",
       "      <td>20</td>\n",
       "      <td>6</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>0.514580</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>gini</td>\n",
       "      <td>log2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>0.510705</td>\n",
       "      <td>10</td>\n",
       "      <td>8</td>\n",
       "      <td>gini</td>\n",
       "      <td>sqrt</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>216 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     mean_test_score  n_estimators  max_depth criterion max_features\n",
       "160         0.579307            50          5   entropy         sqrt\n",
       "137         0.578871           100          3   entropy         sqrt\n",
       "44          0.576049            30          4      gini         log2\n",
       "143         0.574047           100          3   entropy         log2\n",
       "125         0.573402           100          2   entropy         sqrt\n",
       "135         0.572022            40          3   entropy         sqrt\n",
       "119         0.571485           100          1   entropy         log2\n",
       "136         0.570542            50          3   entropy         sqrt\n",
       "157         0.570521            20          5   entropy         sqrt\n",
       "171         0.570499            40          6   entropy         sqrt\n",
       "122         0.569553            30          2   entropy         sqrt\n",
       "167         0.569152           100          5   entropy         log2\n",
       "123         0.568059            40          2   entropy         sqrt\n",
       "159         0.567526            40          5   entropy         sqrt\n",
       "16          0.567502            50          2      gini         sqrt\n",
       "138         0.567423            10          3   entropy         log2\n",
       "69          0.567370            40          6      gini         log2\n",
       "149         0.566660           100          4   entropy         sqrt\n",
       "140         0.566632            30          3   entropy         log2\n",
       "71          0.566337           100          6      gini         log2\n",
       "38          0.566286            30          4      gini         sqrt\n",
       "202         0.566147            50          8   entropy         log2\n",
       "133         0.566133            20          3   entropy         sqrt\n",
       "187         0.566035            20          7   entropy         log2\n",
       "185         0.565656           100          7   entropy         sqrt\n",
       "116         0.565614            30          1   entropy         log2\n",
       "132         0.565515            10          3   entropy         sqrt\n",
       "52          0.565050            50          5      gini         sqrt\n",
       "5           0.564641           100          1      gini         sqrt\n",
       "179         0.564463           100          6   entropy         log2\n",
       "..               ...           ...        ...       ...          ...\n",
       "50          0.538357            30          5      gini         sqrt\n",
       "40          0.538333            50          4      gini         sqrt\n",
       "42          0.538286            10          4      gini         log2\n",
       "164         0.537621            30          5   entropy         log2\n",
       "20          0.537086            30          2      gini         log2\n",
       "163         0.536543            20          5   entropy         log2\n",
       "82          0.536192            50          7      gini         log2\n",
       "18          0.536074            10          2      gini         log2\n",
       "39          0.535547            40          4      gini         sqrt\n",
       "168         0.535536            10          6   entropy         sqrt\n",
       "21          0.535382            40          2      gini         log2\n",
       "180         0.535285            10          7   entropy         sqrt\n",
       "104         0.534782            30          9      gini         log2\n",
       "49          0.534070            20          5      gini         sqrt\n",
       "205         0.534033            20          9   entropy         sqrt\n",
       "79          0.533105            20          7      gini         log2\n",
       "72          0.532395            10          7      gini         sqrt\n",
       "62          0.531140            30          6      gini         sqrt\n",
       "0           0.530009            10          1      gini         sqrt\n",
       "31          0.529010            20          3      gini         log2\n",
       "174         0.527879            10          6   entropy         log2\n",
       "210         0.527168            10          9   entropy         log2\n",
       "211         0.526498            20          9   entropy         log2\n",
       "30          0.526331            10          3      gini         log2\n",
       "85          0.525741            20          8      gini         sqrt\n",
       "199         0.525078            20          8   entropy         log2\n",
       "60          0.523802            10          6      gini         sqrt\n",
       "61          0.522700            20          6      gini         sqrt\n",
       "102         0.514580            10          9      gini         log2\n",
       "84          0.510705            10          8      gini         sqrt\n",
       "\n",
       "[216 rows x 5 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cv_df.sort_values('mean_test_score', ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "model.best_estimator_.feature_importances_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cv_score = []\n",
    "for cv_num in range(20, 30, 1):\n",
    "    param_grid=dict(\n",
    "    max_depth= [4], \n",
    "    n_estimators=[18],\n",
    "    learning_rate=[0.0001],\n",
    "    min_child_weight=[100],\n",
    "    subsample=[0.75],\n",
    "    objective=['rank:pairwise'],\n",
    "    gamma=[0],  #影响不大\n",
    ")\n",
    "\n",
    "    model = GridSearchCV(config.model(), param_grid, scorer, cv=cv_num, verbose=1, n_jobs=-1)\n",
    "    # model = RandomizedSearchCV(config.model(), param_grid, 3000, scorer, cv=3, verbose=1, n_jobs=-1)\n",
    "\n",
    "    model.fit(X, Y)\n",
    "    model.cv_results_\n",
    "    all_scores = model.cv_results_['mean_test_score']\n",
    "    all_params = model.cv_results_['params']\n",
    "    columns = []\n",
    "    for key in all_params[0]:\n",
    "        columns.append(key)\n",
    "    list_result = []\n",
    "    for i in range(len(all_scores)):\n",
    "        temp=[all_scores[i]]\n",
    "        for col in columns:\n",
    "            temp.append(all_params[i][col])\n",
    "        list_result.append(temp)\n",
    "    columns.insert(0, 'mean_test_score')\n",
    "    cv_df = pd.DataFrame(list_result, columns=columns)\n",
    "    cv_score.append(model.best_score_)\n",
    "    print(model.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cv_score0 = cv_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cv_score1 = cv_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "plt.plot(cv_score0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cv_score0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
